package com.example.comfortableweather


import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.example.comfortableweather.ui.home.HomeFragment
import com.example.comfortableweather.ui.me.MeFragment
import com.example.comfortableweather.ui.start.StartFragment

class ViewPagerAdapter(fragmentActivity: FragmentActivity)
    : FragmentStateAdapter(fragmentActivity) {

    // 使用SparseArray缓存已创建的Fragment实例，key为position，value为Fragment
    private val fragmentCache = SparseArray<Fragment>()

    // 根据位置创建或获取对应的Fragment实例
    override fun createFragment(position: Int): Fragment {
        // 首先尝试从缓存中获取Fragment
        val cachedFragment = fragmentCache.get(position)
        return if (cachedFragment != null) {
            // 如果缓存中存在，直接返回缓存的Fragment
            cachedFragment
        } else {
            // 如果缓存中不存在，则根据position创建新的Fragment实例
            val newFragment = when (position) {
                0 -> HomeFragment() // 第一个页面：HomeFragment
                1 -> StartFragment() // 第二个页面：StarListFragment
                2 -> MeFragment() // 第三个页面：MeFragment
                else -> throw IllegalArgumentException("Invalid position: $position") // 非法position抛出异常
            }
            // 将新创建的Fragment放入缓存中
            fragmentCache.put(position, newFragment)
            // 返回新创建的Fragment实例
            newFragment
        }
    }

    // 返回页面总数，这里固定为3个页面
    override fun getItemCount(): Int {
        return 3
    }

}